home *** CD-ROM | disk | FTP | other *** search
/ EnigmA Amiga Run 1997 July / EnigmA AMIGA RUN 20 (1997)(G.R. Edizioni)(IT)[!][issue 1997-07 & 08][EAR-CD IV].iso / earcd / text / hyper / ixg07db.lha / ixg07db / docs / n&c.rexx < prev    next >
OS/2 REXX Batch file  |  1997-04-12  |  3KB  |  146 lines

  1. /*
  2. ** Sample arexx program for iX-Guide
  3. ** This is Naughts & Crosses game which you can include
  4. ** into your document and play it.
  5. ** This is just an example of what can be done with
  6. ** iX-Guide AREXX which still needs to be improved a lot.
  7. */
  8.  
  9. if ~show('l', "rexxsupport.library") then
  10.     addlib('rexxsupport.library',0,-30,0)
  11.  
  12. OPTIONS RESULTS
  13.  
  14. /*
  15. ** Every rexx client receives pointer to iXG window as the last argument
  16. ** in form 'iXW=<address>'. That is the window the rexx client was launched
  17. ** from. You always have to pass this pointer to ADDCLIENT !
  18. **
  19. ** We will also receive dimensions of draw area
  20. */
  21.  
  22. PARSE ARG dimx dimy 'iXW=' windowPTR .
  23.  
  24. /*
  25. ** Port name of every rexx client should be in the following form:
  26. ** "IXCL_anythingyouwant_windowPTR"
  27. */
  28.  
  29. portname = "IXCL_n&c_"
  30. portname = INSERT(windowPTR,portname,LENGTH(portname))
  31.  
  32. /************************************************************************/
  33.  
  34. if show('p',portname) then exit   /* we are already running */
  35.  
  36. ADDRESS IXGUIDE
  37.  
  38. /*
  39. ** Add this client to iX-Guide and pass received window pointer
  40. */
  41.  
  42. AddClient windowPTR
  43.  
  44. /************************************************************************/
  45. EMPTY   = 0
  46. NAUGHT  = 1
  47. CROSS   = 2
  48. board = EMPTY                 /* this is our board variable */
  49. fw = dimx % 3                 /* field dimensions */
  50. fh = dimy % 3
  51.  
  52. call openport(portname)       /* open our message port */
  53. setport portname MOUSE MISC   /* we want to receive mouse and misc events */
  54.  
  55. AllocRaster 1  /* allocate stuff for first rectangle object in our document */
  56. rp=result      /* this is the pointer to rastport for our graphics operations */
  57. AutoRefresh rp OFF
  58.  
  59. call InitBoard()      /* initialize the board */
  60. call DrawBoard()      /* Draw everything */
  61.  
  62. shutdown=0
  63. do until shutdown
  64.  call waitpkt(portname)
  65.  msg = getpkt(portname)
  66.  
  67.  if msg ~= '0000 0000'x then
  68.   do
  69.    win = getarg(msg)
  70.   
  71.      if win='0000 0000'x then shutdown=1  /* pointer to window is NULL */
  72.      else if win=windowPTR then          /* this is message from our window */
  73.       do
  74.        cmd = getarg(msg,1)
  75.        if cmd = 'MISC' then
  76.          do
  77.           a2 = getarg(msg,2)
  78.           if a2 = 'CLOSEWIN' then shutdown=1
  79.          end
  80.       end
  81.    call reply(msg,0)
  82.   end 
  83. end
  84.  
  85. /*
  86. ** End of program
  87. */
  88.  
  89. call CleanUp()
  90. exit
  91.  
  92. /*
  93. ** Support functions
  94. */
  95.  
  96. InitBoard:
  97.  do j=1 to 3
  98.   do i=1 to 3
  99.    board.i.j = EMPTY
  100.   end
  101.  end
  102. return 0
  103.  
  104. DrawField:
  105.  arg x,y,kind
  106.  
  107.  xpos = x
  108.  ypos = y
  109.  SetABPen rp 1
  110.  if kind=NAUGHT then
  111.    DrawEllipse rp xpos+15 ypos+15 15 15
  112.  if kind=CROSS then
  113.    do
  114.     Move rp xpos ypos
  115.     Draw rp xpos+15 ypos+15
  116.    end
  117.  if kind=EMPTY then
  118.   do
  119.   SetABPen rp 0
  120.   RectFill rp xpos ypos 15 15
  121.   end
  122. return 0
  123.  
  124. DrawBoard:
  125.  do j = 0 to 2
  126.   do i = 0 to 2
  127.    SetABPen rp 1
  128.    Move rp i*fw j*fh+fh-1
  129.    Draw rp i*fw j*fh
  130.    Draw rp i*fw+fw-1 j*fh
  131.    SetABPen rp 2
  132.    Draw rp i*fw+fw-1 j*fh+fh-1
  133.    Draw rp i*fw j*fh+fh-1
  134.   end
  135.  end
  136.  
  137.  Refresh rp
  138. /* call DrawField(5,10,NAUGHT)*/
  139. return 0
  140.  
  141. CleanUp:
  142.  FreeRaster rp
  143.  RemClient
  144.  call closeport(portname)
  145. return 0
  146.